/**
 * Software License, Version 1.0
 * 
 * Copyright 2003 The Trustees of Indiana University.  All rights reserved.
 * 
 *
 *Redistribution and use in source and binary forms, with or without 
 *modification, are permitted provided that the following conditions are met:
 *
 *1) All redistributions of source code must retain the above copyright notice,
 * the list of authors in the original source code, this list of conditions and
 * the disclaimer listed in this license;
 *2) All redistributions in binary form must reproduce the above copyright 
 * notice, this list of conditions and the disclaimer listed in this license in
 * the documentation and/or other materials provided with the distribution;
 *3) Any documentation included with all redistributions must include the 
 * following acknowledgement:
 *
 *"This product includes software developed by the Community Grids Lab. For 
 * further information contact the Community Grids Lab at 
 * http://communitygrids.iu.edu/."
 *
 * Alternatively, this acknowledgement may appear in the software itself, and 
 * wherever such third-party acknowledgments normally appear.
 * 
 *4) The name Indiana University or Community Grids Lab or NaradaBrokering, 
 * shall not be used to endorse or promote products derived from this software 
 * without prior written permission from Indiana University.  For written 
 * permission, please contact the Advanced Research and Technology Institute 
 * ("ARTI") at 351 West 10th Street, Indianapolis, Indiana 46202.
 *5) Products derived from this software may not be called NaradaBrokering, 
 * nor may Indiana University or Community Grids Lab or NaradaBrokering appear
 * in their name, without prior written permission of ARTI.
 * 
 *
 * Indiana University provides no reassurances that the source code provided 
 * does not infringe the patent or any other intellectual property rights of 
 * any other entity.  Indiana University disclaims any liability to any 
 * recipient for claims brought by any other entity based on infringement of 
 * intellectual property rights or otherwise.  
 *
 *LICENSEE UNDERSTANDS THAT SOFTWARE IS PROVIDED "AS IS" FOR WHICH NO 
 *WARRANTIES AS TO CAPABILITIES OR ACCURACY ARE MADE. INDIANA UNIVERSITY GIVES
 *NO WARRANTIES AND MAKES NO REPRESENTATION THAT SOFTWARE IS FREE OF 
 *INFRINGEMENT OF THIRD PARTY PATENT, COPYRIGHT, OR OTHER PROPRIETARY RIGHTS. 
 *INDIANA UNIVERSITY MAKES NO WARRANTIES THAT SOFTWARE IS FREE FROM "BUGS", 
 *"VIRUSES", "TROJAN HORSES", "TRAP DOORS", "WORMS", OR OTHER HARMFUL CODE.  
 *LICENSEE ASSUMES THE ENTIRE RISK AS TO THE PERFORMANCE OF SOFTWARE AND/OR 
 *ASSOCIATED MATERIALS, AND TO THE PERFORMANCE AND VALIDITY OF INFORMATION 
 *GENERATED USING SOFTWARE.
 */
package cgl.narada.service.security.securityprovider;

import org.apache.log4j.Logger;

/**
 * Created on May 5, 2005
 * 
 * @author Harshawardhan Gadgil (hgadgil@grids.ucs.indiana.edu)
 */

public class Timing {

	static Logger log = Logger.getLogger("Timing");

	public Timing() {
		//      Properties props = new Properties();
		//      props.put("NB_HOME", "c:/Home/NaradaBrokering-0.99-rc4");
		//      ServiceProperties sp = ServiceProperties.getServiceProperties();
		//      sp.initialize(props);
	}

	public void timeCertificateVerification(int numTimes) {

//		ClockI hrclock = HRClock.getClock();
//
//		FileOutputStream fout = null;
//		try {
//			fout = new FileOutputStream("C:/certTimings.txt");
//		} catch (FileNotFoundException e1) {
//			// TODO Auto-generated catch block
//			e1.printStackTrace();
//		}
//
//		long time = 0;
//		for (int i = 0; i < numTimes; i++) {
//			long start = hrclock.getTimeMicroseconds();
//			Certificate cert1 = CertificateUtil.getCertificate("cgl-entity-a1");
//
//			PublicKey rootPubKey = CertificateUtil
//					.getPublicKey(CertificateManager.ROOT_CA_ALIAS);
//			try {
//				cert1.verify(rootPubKey);
//				log.debug("VALID !");
//			} catch (Exception e) {
//				// TODO Auto-generated catch block
//				// e.printStackTrace();
//				log.debug("NOT VALID !");
//			}
//			long stop = hrclock.getTimeMicroseconds();
//
//			time += (stop - start);
//			try {
//				fout.write(("" + (stop - start) + "\n").getBytes());
//			} catch (IOException e2) {
//				e2.printStackTrace();
//			}
//		}
//
//		try {
//			fout.close();
//		} catch (IOException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//
//		time = time / numTimes;
//		log.info("AVG Time: " + time + " microSec");
	}

	public void timeMessageSigning(int numTimes) {

//		ClockI hrclock = HRClock.getClock();
//
//		FileOutputStream fout = null;
//		try {
//			fout = new FileOutputStream("C:/Timings-MSGSigning.txt");
//		} catch (FileNotFoundException e1) {
//			// TODO Auto-generated catch block
//			e1.printStackTrace();
//		}
//
//		long time = 0;
//		for (int i = 0; i < numTimes; i++) {
//			long start = hrclock.getTimeMicroseconds();
//
//			{ // Process to time
//				BrokerDiscoveryRequest req = new BrokerDiscoveryRequest();
//				req.setHostname("localhost");
//				req.setBelongingToNetwork("myNetwork");
//				req.setPort(6500);
//				Certificate cert1 = CertificateUtil.getCertificate("cgl-entity-a1");
//				req.setSecurityCredentials(cert1.toString());
//				req.setTransportProtocols(new String[] { "tcp", "niotcp" });
//
//				byte[] msgBytes = req.getBytes();
//				PublicKey pubKey = CertificateUtil.getPublicKey("cgl-entity-a2");
//
//				EncryptedMessagePayload encPayload = EncryptedMessagePayload
//						.generate(msgBytes, pubKey);
//
//				EncryptedMessagePayload encPayload2 = EncryptedMessagePayload
//						.createObjectFromBytes(encPayload.getBytes());
//
//				PrivateKey priv = CertificateUtil.getPrivateKey("cgl-entity-a2");
//
//				byte[] payload2 = encPayload2.getDecryptedPayload(priv);
//
//				BrokerDiscoveryRequest req2 = BrokerDiscoveryRequest
//						.createObjectFromBytes(payload2);
//			}
//
//			long stop = hrclock.getTimeMicroseconds();
//
//			time += (stop - start);
//			try {
//				fout.write(("" + (stop - start) + "\r\n").getBytes());
//			} catch (IOException e2) {
//				e2.printStackTrace();
//			}
//		}
//
//		try {
//			fout.close();
//		} catch (IOException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//
//		time = time / numTimes;
//		log.info("AVG Time: " + time + " microSec");
	}

	public static void main(String[] args) {
		Timing t = new Timing();
		t.timeMessageSigning(120);
	}
}